import router from "@/router";
import NProgress from "nprogress";
import { Route, NavigationGuardNext } from "vue-router";
import { MessageBox } from "element-ui";
import { hasLogined } from "@/utils/account";
import { rNames } from "@/config/menuConfig";
import { AsideModule } from "@/store/modules/AsideModule";
import { HeadModule } from "@/store/modules/HeadModule";
import { isUndefined } from "lodash";

/**
 * 白名单，不用登录就能到达的路由。
 */
const whiteList = ["/login", "/regist"];

router.beforeEach((to: Route, from: Route, next: NavigationGuardNext) => {
  // console.log("router.beforeEach to ", to);
  NProgress.start();
  if (hasLogined()) {
    if (to.name === rNames.login) {
      next({ name: rNames.home });
      NProgress.done();
    } else {
      // todo 这里是对user身份的识别以及显示
      next();
    }
  } else {
    /**
     * 不等于 -1，表示列表中有一些元素等于 to.path。
     * 也就是要去到的路由仍然在白名单之内。
     */
    if (whiteList.indexOf(to.path) !== -1) {
      /**
       * 第一次登录的时候，这里的to.path === /login，那么whiteList.indexOf(to.path) === 0
       * 接下来就是跳到login页面。
       */
      next();
    } else {
      /**
       * 不在白名单之内，全部都返回login页面。
       */
      if (to.name === rNames.home) {
        next({ name: rNames.login });
        NProgress.done();
      } else {
        MessageBox.alert("由于太久没有操作授权已经超时，请重新登录", {
          confirmButtonText: "确定",
          type: "error"
        }).then(() => {
          next({ name: rNames.login });
          NProgress.done();
        });
      }
    }
  }
});

router.afterEach((to: Route, from: Route) => {
  // console.log("router.afterEach to ", to);
  AsideModule.SET_ACTIVE_KEY(to.name);
  if (isUndefined(to.meta.addToNavigation) || to.meta.addToNavigation)
    HeadModule.UpdateNav(to.name);
  NProgress.done();
});
